﻿using System;
using BepInEx;
using UnityEngine;
using HarmonyLib;
using System.Collections;
using System.Reflection;
using System.Collections.Generic;

namespace ConsoleX
{
    [BepInPlugin("plugin.Dyson.ConsoleX", "ConsoleX", "1.0")]
    public class Main : BaseUnityPlugin
    {
        [HarmonyPrefix]
        [HarmonyPatch(typeof(XConsole), "Update")]
        public static bool Update(XConsole __instance)
        {
            bool show = (bool)Traverse.Create(__instance).Field("showConsole").GetValue();
            if (Input.GetKeyDown(KeyCode.O))
            {
                Traverse.Create(__instance).Field("showConsole").SetValue(!show);
            }
            Dictionary<string, string> cmds = new Dictionary<string, string>();
            cmds.Add("铁矿", "1001");
            cmds.Add("铜矿", "1002");
            cmds.Add("硅石", "1003");
            cmds.Add("钛石", "1004");
            cmds.Add("石矿", "1005");
            cmds.Add("煤矿", "1006");
            cmds.Add("木材", "1030");
            cmds.Add("植物燃料", "1031");
            cmds.Add("可燃冰", "1011");
            cmds.Add("金伯利矿石", "1012");
            cmds.Add("分形硅石", "1013");
            cmds.Add("光栅石", "1014");
            cmds.Add("刺笋结晶", "1015");
            cmds.Add("单极磁石", "1016");
            cmds.Add("铁块", "1101");
            cmds.Add("铜块", "1104");
            cmds.Add("高纯硅块", "1105");
            cmds.Add("钛块", "1106");
            cmds.Add("石材", "1108");
            cmds.Add("高能石墨", "1109");
            cmds.Add("钢材", "1103");
            cmds.Add("钛合金", "1107");
            cmds.Add("玻璃", "1110");
            cmds.Add("钛化玻璃", "1119");
            cmds.Add("棱镜", "1111");
            cmds.Add("金刚石", "1112");
            cmds.Add("晶格硅", "1113");
            cmds.Add("齿轮", "1201");
            cmds.Add("磁铁", "1102");
            cmds.Add("磁线圈", "1202");
            cmds.Add("电动机", "1203");
            cmds.Add("电磁涡轮", "1204");
            cmds.Add("超级磁场环", "1205");
            cmds.Add("粒子容器", "1206");
            cmds.Add("奇异物质", "1127");
            cmds.Add("电路板", "1301");
            cmds.Add("处理器", "1303");
            cmds.Add("量子芯片", "1305");
            cmds.Add("微晶元件", "1302");
            cmds.Add("位面过滤器", "1304");
            cmds.Add("粒子宽带", "1402");
            cmds.Add("电浆激发器", "1401");
            cmds.Add("光子合并器", "1404");
            cmds.Add("太阳帆", "1501");
            cmds.Add("水", "1000");
            cmds.Add("原油", "1007");
            cmds.Add("精炼油", "1114");
            cmds.Add("硫酸", "1116");
            cmds.Add("氢", "1120");
            cmds.Add("重氢", "1121");
            cmds.Add("反物质", "1122");
            cmds.Add("临界光子", "1208");
            cmds.Add("液氢燃料棒", "1801");
            cmds.Add("氘核燃料棒", "1802");
            cmds.Add("反物质燃料棒", "1803");
            cmds.Add("塑料", "1115");
            cmds.Add("石墨烯", "1123");
            cmds.Add("碳纳米管", "1124");
            cmds.Add("有机晶体", "1117");
            cmds.Add("钛晶石", "1118");
            cmds.Add("卡西米尔晶体", "1126");
            cmds.Add("引力透镜", "1209");
            cmds.Add("空间翘曲器", "1210");
            cmds.Add("湮灭约束球", "1403");
            cmds.Add("推进器", "1405");
            cmds.Add("加力推进器", "1406");
            cmds.Add("物流运输机", "5001");
            cmds.Add("星际物流运输船", "5002");
            cmds.Add("框架材料", "1125");
            cmds.Add("戴森球组件", "1502");
            cmds.Add("小型运载火箭", "1503");
            cmds.Add("地基", "1131");
            cmds.Add("加速剂1", "1141");
            cmds.Add("加速剂2", "1142");
            cmds.Add("加速剂3", "1143");
            cmds.Add("传送带", "2001");
            cmds.Add("高速传送带", "2002");
            cmds.Add("极速传送带", "2003");
            cmds.Add("分拣器", "2011");
            cmds.Add("高速分拣器", "2012");
            cmds.Add("极速分拣器", "2013");
            cmds.Add("四向分流器", "2020");
            cmds.Add("小型储物仓", "2101");
            cmds.Add("大型储物仓", "2102");
            cmds.Add("储液罐", "2106");
            cmds.Add("制造台1", "2303");
            cmds.Add("制造台2", "2304");
            cmds.Add("制造台3", "2305");
            cmds.Add("电力感应塔", "2201");
            cmds.Add("无线输电塔", "2202");
            cmds.Add("卫星配电站", "2212");
            cmds.Add("风力涡轮机", "2203");
            cmds.Add("火力发电厂", "2204");
            cmds.Add("微型聚变发电站", "2211");
            cmds.Add("采矿机", "2301");
            cmds.Add("电弧熔炉", "2302");
            cmds.Add("原油萃取站", "2307");
            cmds.Add("原油精炼厂", "2308");
            cmds.Add("抽水站", "2306");
            cmds.Add("化工厂", "2309");
            cmds.Add("位面熔炉", "2315");
            cmds.Add("分馏塔", "2314");
            cmds.Add("喷涂机", "2313");
            cmds.Add("太阳能板", "2205");
            cmds.Add("蓄电器", "2206");
            cmds.Add("蓄电器满", "2207");
            cmds.Add("电磁轨道弹射器", "2311");
            cmds.Add("射线接收站", "2208");
            cmds.Add("垂直发射井", "2312");
            cmds.Add("能量枢纽", "2209");
            cmds.Add("微型粒子对撞机", "2310");
            cmds.Add("人造恒星", "2210");
            cmds.Add("行星内物流运输站", "2103");
            cmds.Add("星际物流运输站", "2104");
            cmds.Add("轨道采集器", "2105");
            cmds.Add("矩阵研究站", "2901");
            cmds.Add("电磁矩阵", "6001");
            cmds.Add("能量矩阵", "6002");
            cmds.Add("结构矩阵", "6003");
            cmds.Add("信息矩阵", "6004");
            cmds.Add("引力矩阵", "6005");
            cmds.Add("宇宙矩阵", "6006");

            if (show)
            {
                string cmd = (string)Traverse.Create(__instance).Field("commandText").GetValue();
                if (cmd.Contains("\n"))
                {
                    cmd = cmd.Trim();
                    cmd = cmd.Replace("\r\n", string.Empty);
                    cmd = cmd.Replace("\r", string.Empty);
                    cmd = cmd.Replace("\n", string.Empty);
                    if (cmd.Length > 0)
                    {
                        //中文逗号
                        string[] strArray = cmd.Split("，".ToCharArray(), 2);
                        if (cmds.ContainsKey(strArray[0]))
                        {
                            int result1 = 0;
                            int result2 = 0;
                            int.TryParse(cmds[strArray[0]], out result1);
                            int.TryParse(strArray[1], out result2);
                            if (result1 <= 0 || result2 <= 0)
                                return true;
                            GameMain.mainPlayer.TryAddItemToPackage(result1, result2, false);
                            Traverse.Create(__instance).Field("commandText").SetValue("");
                            return false;
                        }
                    }
                }
            }
            return true;
        }

        //Unity的Start生命周期
        void Start()
        {
            try
            {
                Harmony.CreateAndPatchAll(typeof(Main));
            }
            catch (Exception ex)
            {
                Logger.LogInfo(ex.Message);
            }
            finally
            {
                //清理
            }
            //输出日志
            Logger.LogInfo("Plugin Start");
        }
    }
}
